/* 
  假设：编写一个方法，求一个字符串的字节长度。 一个英文字符占用一个字节，一个中文字符占用两个字节
    分析: 
       要点： 中文字符unicode编码大于255
               hello
               01234
               字符串.charCodeAt(索引号)

       思路:  原字符串长度保存到变量bytes中。 
              遍历字符串，判断字符，如果字符是中文字符bytes++。

        let str = 'hello大家好'
        let count = 0 //统计字节长度

        for(let i = 0; i < str.length; i++){
            let code = str.charCodeAt(i)
            if(code > 255){
                count += 2
            }else{
                count++
            }
        }
*/
function GetBytes(str) {
    var len = str.length;
    var bytes = len;
    for (var i = 0; i < len; i++) {
        if (str.charCodeAt(i) > 255) bytes++;
    }
    return bytes;
}

/**
 * 利用欧几里得算法（辗转相除法）编写一个函数gcd(x,y) 求最大公约数，编写一个函数lcm(x,y)求最小公倍数
 
 1.最大公约数
    递归的方式：
    首先确定如何求最大公约数，我们采用欧几里得算法（辗转相除法），算法描述如下：
    例：48,57
    57%48=9     大数对小数求余
    48%9=3       小数对上次的余数求余，重复这个过程直到余数为0

    9%3=0         余数为0时，此次求余的小数就是最大公约数

 2.最小公倍数
  定理：x、y 两个数的最小公倍数乘以它们的最大公约数等于 x 和 y 本身的乘积。
 
  即LCM(x,y)=(x*y)/GCD(x,y)

 */
function gcd(x, y) {
    let max = x > y ? x : y
    let min = y < x ? y : x
    if (max % min == 0) {
        //如果能整除，小数就是最大公约数
        return min
    } else {
        return gcd(min, max % min)
    }
}


function lcm(x, y) {
    return (x * y) / gcd(x, y)
}
